/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import View.TelaGerente;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author Marcel
 */
public class Sistema {

    private static Sistema instance;
    private List<Usuario> usuarios;
    private List<Evento> eventos;
    private int id;

    private Sistema() {
        this.id = 1;
        usuarios = new ArrayList<Usuario>();
        eventos = new ArrayList<Evento>();
    }

    public synchronized static Sistema getInstance() {
        if (instance == null) {
            instance = new Sistema();
        }
        return instance;
    }

    public void addUsuario(Usuario u) {
        usuarios.add(u);
    }

    public List<Evento> getEventos() {
        return eventos;
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public Cargo validaUsuario(String usuario, String senha) {
        for (int i = 0; i < usuarios.size(); i++) {
            Usuario u = usuarios.get(i);
            if (u.getLogin().equals(usuario)) {
                if (u.getSenha().equals(senha)) {
                    if (u.getCargo() == Cargo.GERENTE) {

                        return Cargo.GERENTE;
                    } else if (u.getCargo() == Cargo.FUNCIONARIODABILHETERIA) {
                        return Cargo.FUNCIONARIODABILHETERIA;
                    }
                }
            }
        }
        return null;
    }

    public void cadastraUsuario() {
        Usuario u = new Usuario();
        usuarios.add(u);
    }

    public Evento getEvento(int id) {
        return eventos.get(id);
    }

    public Evento[] getProximos10Eventos() {
        Evento[] e = new Evento[10];
        return e;
    }

    public boolean addEvento(Evento e) {
        if (horarioDisponivel(e.getInicio(), e.getFim())) {
            id++;
            eventos.add(e);
            return true;
        } else {
            return false;
        }
    }

    public boolean horarioDisponivel(Calendar inicio, Calendar fim) {
        if (fim.before(inicio)) {
            return false;
        }
        for (Evento e : eventos) {
            if (!e.getCancelado()) {
                if (inicio.before(e.getFim()) && fim.after(e.getInicio())) {
                    return false;
                } else {
                    if (e.getInicio().before(fim) && e.getFim().after(inicio)) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    public boolean registraEvento(Evento e) {
        boolean sucesso = addEvento(e);
        return sucesso;
    }

    public void cadastraUsuario(Usuario u) {
    }

    void removerUsuario(Usuario u) {
        for (int i = 0; i < usuarios.size(); i++) {
            //for (Usuario usuario : usuarios) {
            if (u.getLogin().equals(usuarios.get(i).getLogin())) {
                usuarios.remove(usuarios.get(i));
            }
        }
    }

    public int getId() {
        return id;
    }
}
